package it.univaq.mwt.exceptionmonitor;

// Tramite questa classe vengono catturate le eccezioni
// Ogni eccezione deve essere tracciata su disco tramite la classe LogManager

import it.univaq.mwt.log.LogManager;

public class WishListrException implements LivelloEx{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private LogManager log = null;
	private static int count = 0;
	private static WishListrException singleton = new WishListrException();
	
	public WishListrException(){
		log = LogManager.getIstance();
		monitor();
	}
	
	public WishListrException(int msg){
		log = LogManager.getIstance();
		monitor(msg);
	}
	
	public WishListrException(Exception e, int msg){
		log = LogManager.getIstance();
		monitor(e, msg);
	}
	
	private void monitor() {
		incrementaCount();
	}
	private void monitor(int msg) {
	/*	
	 * 
	 */
	}
	private void monitor(Exception e, int msg) {
		try{
			StackTraceElement[] ste = e.getStackTrace();
			for (int i=0; i < ste.length; i++ ){
				switch (msg){
				case WORNING:
					log.scrivi( ste[i].toString(),WORNING);
					System.out.print(WORNING_MSG);
					break;
				case ERROR:
					log.scrivi( ste[i].toString(),ERROR);
					System.out.print(ERROR_MSG);
					break;
				case FATAL:
					log.scrivi( ste[i].toString(),FATAL);
					System.exit(1);
					System.out.print(FATAL_MSG);
					break;
					default:
						log.scrivi( ste[i].toString(),ERROR);
				}				
				incrementaCount();
			}
		}catch (Exception exc){
			exc.printStackTrace();
			exc.printStackTrace(System.out);
			System.out.print("Errore durante la gestione dell'eccezione");
		}
	}

	public static WishListrException getIstance(){
		if (singleton == null){
			singleton = new WishListrException();
		}
		return singleton;
	}
	
	public LogManager getLog() {
		return log;
	}

	public void setLog(LogManager log) {
		this.log = log;
	}

	public static int getCount() {
		return count;
	}
	
	public static void incrementaCount() {
		WishListrException.count++;
		return;
	}
}
